
package cn.com.pusai.core.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 验证通用类
 * 
 * */
public class ValidatorUtil
{

	public ValidatorUtil()
	{
	}
	
	/**
	 * 验证手机号码
	 * */
	public static boolean isMobile(String input)
	{
		return isMatchPattern(input, "1[0-9]{10}");
	}

	/**
	 * 验证是否是移动手机号码
	 * */
	public static boolean isCMCCMobile(String input)
	{
		return isMatchPattern(input, "(?:134|135|136|137|138|139|150|157|158|159|187|188)[0-9]{8}");
	}

	/**
	 * 验证是否是联通手机号码
	 * */
	public static boolean isUNICOMMobile(String input)
	{
		return isMatchPattern(input, "(?:130|131|132|156|185|186)[0-9]{8}");
	}
	
	/**
	 * 验证是否是日期
	 * @param 数据
	 * */
	public static boolean isDate(String input)
	{
		return isDate(input, "yyyy-MM-dd");
	}
	
	/**
	 * 验证是否是移动手机号码
	 * @param 数据
	 * @param 验证的格式
	 * */
	public static boolean isDate(String input, String pattern)
	{
		if (input == null)
			return false;
		java.util.Date date = null;
		try
		{
			date = DateUtil.parse(input, pattern);
		}
		catch (Exception e)
		{
			return false;
		}
		return input.equals(DateUtil.format(date, pattern));
	}
	
	/**
	 * 验证是否是url 地址
	 * @param url地址字符串
	 * */
	public static boolean isURL(String input)
	{
		if (isURL(input, "http"))
			return true;
		return isURL(input, "https");
	}
	
	/**
	 * 验证是否是url 地址
	 * @param url 地址字符串
	 * @param 协议
	 * */
	public static boolean isURL(String input, String protocol)
	{
		return isMatchPattern(input, (new StringBuilder("(?i)")).append(Pattern.quote(protocol)).append("://[\\S].+").toString());
	}
	
	
	/**
	 * 验证是否全是中文
	 * */
	public static boolean isAllChinese(String input)
	{
		return isMatchPattern(input, "[\\u4e00-\\u9fa5]+");
	}
	
	/**
	 * 验证是否包含中文
	 * */
	public static boolean isContainChinese(String input)
	{
		return isContainPattern(input, "[\\u4e00-\\u9fa5]");
	}
	
	
	/**
	 * 验证是否是email 地址
	 * */
	public static boolean isEmail(String input)
	{
		return isMatchPattern(input, "(?i)[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}");
	}
	
	/**
	 * 验证是否是email 地址
	 * @param email 数据
	 * @param 域名 
	 * */
	public static boolean isEmail(String input, String domain)
	{
		return isMatchPattern(input, (new StringBuilder("(?i)[A-Z0-9._%+-]+@")).append(Pattern.quote(domain)).toString());
	}
	
	/**
	 * 身份证号码验证
	 * */
	public static boolean isIdCard(String input)
	{
		return isMatchPattern(input, "[0-9]{15}|[0-9]{17}[xX0-9]");
	}
	
	
	
	/**
	 * 暂时未明白使用方法
	 * */
	public static boolean isMatchPattern(String input, String regex)
	{
		if (input == null)
			return false;
		else
			return input.matches(regex);
			// return Pattern.matches(regex, input);
	}
	
	/**
	 * 正则表达式 判断是否包含某些字符  使用如:(判断是否存在屏蔽字)
	 * @param input 数据
	 * @param regex 包含字符
	 * */
	public static boolean isContainPattern(String input, String regex)
	{
		if (input == null)
			return false;
		Pattern pattern = Pattern.compile(regex);
		Matcher m = pattern.matcher(input);
		
		return m.find();
	}
}
